package _09_2模板方法改写收银系统;

//创建一个抽象卡类(Card)，提供卡号(id)，余额(balance)，抽象的支付方法(pay)。
public abstract class Card {
    //卡号(id)
    private String id;
    // 余额(balance)
    private double balance; //10000

    //支付的流程是固定的，所以设计为模板方法
    //但是支付细节是不同的，需要定义成抽象方法，让子类去实现
    public final void pay(double money) {
        System.out.println("支付成功");
        System.out.println("原价："+money);

        double pay = calculate(money);

        System.out.println("折扣价："+pay);
        double newBalance = getBalance() - pay;
        System.out.println("余额："+newBalance);

        //新的余额要更新进卡片
        setBalance(newBalance);
    }

    //计算打折方案，由子类实现
    public abstract double calculate(double money);

    //构造方法
    public Card(){}
    public Card(String id, double balance) {
        this.id = id;
        this.balance = balance;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }
}
